/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from 'axios';
import router from '../router';
import { useMainStore } from '@/store/index.js';
import { ElMessage, ElMessageBox } from 'element-plus';
axios.defaults.baseURL = import.meta.env.PROD?'/':'/api';
console.log(axios.defaults.baseURL);
axios.interceptors.request.use(
	//响应拦截
	async config => {
		// 每次发送请求之前判断vuex中是否存在token
		// 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
		// 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
		const mainStore = useMainStore();
		let token = mainStore.token;
		if (token) {
			// config.headers['authorization'] = token
			config.headers['authorization'] = 'Bearer ' + token;
		}
		return config;
	},
	error => {
		return Promise.error(error);
	}
);
// 响应拦截器
axios.interceptors.response.use(response => {
	if (response.status === 200) {
		if (response.data.code == 401) {
			sessionStorage.clear();
			router.push('/login');
			ElMessage({
				type: 'waring',
				message: response.data.msg
			});
		}
		return Promise.resolve(response); //进行中
	} else {
		return Promise.reject(response); //失败
	}
});
/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export const $get = (url: string, params?: object) => {
	return new Promise((resolve, reject) => {
		axios
			.get(url, {
				params: params
			})
			.then(res => {
				resolve(res.data);
			})
			.catch(err => {
				reject(err.data);
			});
	});
};
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export const $post = (url: string, params?: object) => {
	return new Promise((resolve, reject) => {
		axios
			.post(url, params) //是将对象 序列化成URL的形式，以&进行拼接
			.then(res => {
				resolve(res.data);
			})
			.catch(err => {
				reject(err.data);
			});
	});
};
//下面是vue3必须加的，vue2不需要，只需要暴露出去get，post方法就可以

export default {
	install: app => {
		app.config.globalProperties['$get'] = $get;
		app.config.globalProperties['$post'] = $post;
		app.config.globalProperties['$axios'] = axios;
	}
};
